package com.nl.idempotent.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 幂等检查检查.
 *
 * @author breggor
 */
@Target(value = ElementType.METHOD)
@Retention(value = RetentionPolicy.RUNTIME)
public @interface IdemCheck {

    /**
     * 配置模块名.
     *
     * @return 模块名
     */
    String module() default "";

    /**
     * 需要做幂等的业务key.
     *
     * @return 返回业务key集合
     */
    String[] keys() default {};

    /**
     * 是否先检查结果.
     *
     * @return boolean
     */
    boolean test() default true;

    /**
     * 返回数据类型.
     * 注意点：返回类型是泛型时：不能是元素类型
     *
     * @return Class
     */
    Class resultType() default Void.class;
}
